package com.hj.hos;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.text.CharPool;
import com.hj.hos.properties.HosProperties;
import org.springframework.util.StringUtils;

import java.io.InputStream;
import java.util.Date;

/**
 * @author hj
 * @Date 2023/4/29
 * @Description: 存储服务
 */
public abstract class HosService {

    public HosProperties properties;

    /**
     * 跟进文件名,获取带时间戳拼接的新文件名
     *
     * @param fileName 原文件名
     * @return 新文件名
     */
    public String getNewFileName(String fileName) {
        // 主文件名,不包含扩展后缀
        String prefix = FileNameUtil.getPrefix(fileName);
        // 文件后缀名,不带"."
        String suffix = FileNameUtil.getSuffix(fileName);
        // HH:mm:ss 时间格式字符串转为秒数
        long time = DateUtil.timeToSecond(DateUtil.formatTime(new Date()));
        // 新文件名
        return prefix + CharPool.UNDERLINE + time + CharPool.DOT + suffix;
    }

    /**
     * 文件保存路径,按日期区分开
     *
     * @return 文件路径
     */
    public String getPath() {
        // 文件路径 标准日期格式：yyyy-MM-dd
        String path = DateUtil.formatDate(new Date());
        // 如果有前缀，则也带上
        if (StringUtils.hasText(properties.getConfig().getPrefix())) {
            path = properties.getConfig().getPrefix() + CharPool.SLASH + path;
        }
        return path;
    }


    /**
     * 跟进文件名,生成路径,带文件
     *
     * @param fileName 文件名
     * @return 完整的文件存储路径
     */
    public String getPath(String fileName) {
        return getPath() + CharPool.SLASH + getNewFileName(fileName);
    }


    /**
     * 文件上传
     *
     * @param data 文件字节数组
     * @param path 文件路径,含文件名
     * @return http地址
     */
    public abstract String upload(byte[] data, String path);

    /**
     * 文件上传
     *
     * @param inputStream 输入流
     * @param path        文件路径,含文件名
     * @return http地址
     */
    public abstract String upload(InputStream inputStream, String path);


}
